<!--
   face.html
   
   Copyright 2013 dnclive <dnclive@ubunlive3>
   
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
   MA 02110-1301, USA.
-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
	<title>Тест для ОНТИКО</title>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
	<meta name="generator" content="Geany 0.21" />
	
	<link rel="stylesheet" type="text/css" href="css.css">
	
	<!--script data-main="/" src="requirejs/require.js"></script!-->
	
	<script>
		var dojoConfig = 
		{
			async:true,
			isDebug:false,
			cacheBust:false,
			parseOnLoad: true,
			locale:'ru',
			waitSeconds:5,
			paths:
			{
				"tlib":"../tlib",
				"res":"../../../../../../res",
				"tpl":"",
			},
		};
	</script>
	
	<script src="res/josi_lib/js/release/dojo/dojo/dojo.js"></script>
	<!--script src="res/josi_lib/js/dev/dojo/dojo/dojo.js"></script-->
	
	<script>
		var mod_1;
		var mod_2;
		require
		(
			[	
				//"XMLHttpRequest.js",
				"dojo/_base/xhr",
				"dojo/dom-class",
				"dojo/query",
				"dojo/on",
				"dojo/_base/array",
				"dojo/_base/json",
				"tlib/tuti",
			],
			function
			(
				t_xhr,
				t_class,
				t_query,
				t_on,
				t_arr,
				t_json,
				t_uti
			)
			{
				mod_1=
				{
					
					args:
					{
						filling_students:false,
						filling_likes:false,
						vkcom:
						{
							access_token:"",
						}
					},
					
					//наполнение вызов функции с параметрами
					f_f:function(args)
					{
						var self=this;
						var args=args||{};
						//var limit=args.limit||[];
						//var rss_url=t_query(".id_rss_url")[0].value;
						
						var is_recall=args.is_recall;
						var repeate=args.repeate;
						var timeout=args.timeout||0;
						
						var param_arr=args.param_arr||{};
												
						var bnt_node=t_query("."+args.btn_class)[0];
						var log_node=t_query("."+args.log_class)[0];
						var content_node=t_query("."+args.content_class)[0];
						var waiter_node=t_query(".waiter_div")[0];
						
						t_class.remove(waiter_node,"hidden");
						
						console.log(t_query("."+args.form_class+" input"));

						//формируем строку параметров
						var query_param_str="";
						t_arr.forEach(t_query("."+args.form_class+" input"), function(val_item)
						{
							console.log(val_item);
							query_param_str+=val_item.name+"="+val_item.value+"&";
						});
						//из аргументов
						for(var param_name in param_arr)
						{
							var param_val=param_arr[param_name];
							console.log(param_name, param_val);
							query_param_str+=param_name+"="+param_val+"&";
						}
						
						console.log(query_param_str);
						
						//проверяем необходимость повторения
						if (repeate)
						{
							if (!is_recall&&self.args.filling_news)
							{
								self.args.filling_news=false;
								bnt_node.innerHTML="Запустить";
								
								//t_class.add(waiter_node,"hidden");
								
								return;
							}
							
							if(!self.args.filling_news)
							{
								self.args.filling_news=true;
								bnt_node.innerHTML="Остановить";
							}
						}
						
						//return;

						console.log("f.php?f="+args.f+"&"+query_param_str);
						
						//выполняем запрос
						t_xhr("GET",
						{
							url:"f.php?f="+args.f+"&"+query_param_str,
							handleAs:"text",
							load: function(data)
							{
								
								//console.log(data);
								//пробуем преобразовать из json
								try
								{
									resp=t_json.fromJson(data);
									console.log(resp);
									log_node.innerHTML+=resp.log;
									
									console.log(content_node);
									
									if (!t_uti.f_is_empty(content_node))
									{
										console.log(content_node, resp.res);
										self.f_fill_students_box(
										{
											content_node:content_node,
											content:resp.res,
										});
									}
									
								}
								catch(e)	//иначе выводим как текст в лог
								{
									log_node.innerHTML+=data;
									//console.log(data);
									//resp=args.resp_data;
								}

								//ессли процесс заполнения базы не остановили
								if (self.args.filling_news&&repeate)
								{
									//рекурсивно вызываем себя
									setTimout(self.f_f(args), timeout);
								}
								else
								{
									t_class.add(waiter_node,"hidden");
								}
							},
							error:function(err)
							{
								t_class.add(waiter_node,"hidden");
								log_node.innerHTML+=err;
							}
						});
						
					},
					
					//очистка нода
					f_clear_log:function(args)
					{
						t_query(args.log_class)[0].innerHTML="";
					},
					
					//заполнение базы лайков
					f_fill_likes:function(args)
					{
						var self=this;
						var args=args||{};
						var limit=args.limit||[];
						var count=t_query(".id_count_likes")[0].value;
						var is_recall=args.is_recall;
						
						if (!is_recall&&self.args.filling_likes)
						{
							self.args.filling_likes=false;
							t_query(".id_fill_likes")[0].innerHTML="Запустить";
							return;
						}
						
						if(!self.args.filling_likes)
						{
							self.args.filling_likes=true;
							t_query(".id_fill_likes")[0].innerHTML="Остановить";
						}
						
						console.log(count);
						
						t_xhr("GET",
						{
							url:"f.php?f=t_ot_fill_likes_random&count="+count,
							handleAs:"text",
							load: function(data)
							{
								console.log(t_query(".log_1"));
								//t_query(".log_1")[0].innerHTML+=data;
								//t_attr.set(e.target, "innerHTML","");
								//console.log(t_query(".log_1"));
								//на случай если ошибка
								try
								{
									resp=t_json.fromJson(data);
									console.log(resp);
									t_query(".log_2")[0].innerHTML+=resp.log;
									
								}
								catch(e)
								{
									t_query(".log_2")[0].innerHTML+=data;
									//console.log(data);
									//resp=args.resp_data;
								}

								//ессли процесс заполнения базы не остановили
								if (self.args.filling_likes)
								{
									//рекурсивно вызываем себя инкрементируя
									//диапазон запроса
									self.f_fill_likes(
									{
										is_recall:true,
									});
								}
							},
							error:function(err)
							{
								
							}
						});
					},
					
					
					f_fill_students_box:function(args)
					{
						var self=this;
						var content_node=args.content_node;
						var content=args.content;
						
						content_node.innerHTML="";
									
						var item=""
						var i=0;
						console.log(content.length);
						while(i<content.length)
						{
							item='<div style="overflow: hidden;margin-top: 0px;background: #fff;">'+
											'<div class="left stud_out_id">'+content[i].id+'</div>'+
											'<div class="left stud_out_name">'+content[i].name+'</div>'+
											'<div class="right stud_out_grade">'+content[i].grade+'</div>'+
										'</div>'+
										'<div></div>';
							content_node.innerHTML+=item;
							i++;
						}
					},
					
					//получение последних новостей
					f_get_news:function(args)
					{
						var self=this;
						var args=args||{};
						var limit=args.limit||[];
						var count=t_query(".id_count_news")[0].value;
						
						console.log("123");
						
						
						//return;
						
						t_xhr("GET",
						{
							url:"f.php?f=f_news_1&count="+count,
							handleAs:"text",
							load: function(data)
							{
								
								console.log(t_query(".log_3"));
								//на случай если ошибка
								try
								{
									resp=t_json.fromJson(data);
									console.log(resp);
									t_query(".log_3")[0].innerHTML+=resp.log;
									
								}
								catch(e)
								{
									t_query(".log_3")[0].innerHTML+=data;
									//console.log(data);
									//resp=args.resp_data;
								}

								
							},
							error:function(err)
							{
								
							}
						});
						
					},
				};
			}
		);
	
	</script>
	
</head>

<body>
	<div><h2 style="padding:10px">Задание 1</h2></div>
	<div class="main">
		<div class="content_left">
			<div style="width:100%;overflow:hidden">
				<div><h2>Наполнение базы рандомом</h2></div>
				<div class="left" style="overflow:hidden; width:40%">
					<h3>students</h3>
					<div class="form_1" style="overflow: hidden;">
						<div class="left"  style="width: 100px;">Count</div>
						<input class="id_count_1" type="text" name ="count" value="1000"/>
					</div>
					<div 	class="btn btn_fill_once" 
							title="заполняет таблицу students вставляя count записей из students_1 выбранных случайным образом"
							onClick=
							"
								mod_1.f_f(
								{
									f:'t_ot_fill_student_tab_random',
									btn_class:'btn_fill_once',
									log_class:'log_1',
									form_class:'form_1',
									target:this,
								});
							
							">
						fill students once
					</div>
					<div 	class="btn btn_fill_repeating" 
							title="заполняет таблицу students вставляя count записей из students_1 выбранных случайным образом, повторяя данную операцию циклически, пока не нажать остановить"
							onClick=
							"
								mod_1.f_f(
								{
									f:'t_ot_fill_student_tab_random', 
									repeate:true,
									btn_class:'btn_fill_repeating',
									log_class:'log_1',
									form_class:'form_1',
									target:this,
								});
							">
						fill students repeating
					</div>
					<div 	class="btn btn_truncate_students" 
							title="очищает таблицу students"
							onClick=
							"
								mod_1.f_f(
								{
									f:'t_ot_f_truncate_tab',
									param_arr:
									{
										tab_name:'students'
									},
									btn_class:'btn_truncate_students',
									log_class:'log_1',
									form_class:'form_1',
									target:this,
								})
							">
						truncate students
					</div>
				</div>
				<div class="right" style="overflow:hidden; width:40%">
					<h3>likes</h3>
					<div class="form_2" style="overflow: hidden;">
						<div class="left" style="width: 100px;">Count</div>
						<input class="left id_count_likes" name="count" type="text" value="1000"/>
					</div>
					<div 	class="btn btn_fill_likes_once" 
							title="заполняет таблицу likes вставляя count случайным образом полученных записей исходя из наполнения students"
							onClick=
							"
								mod_1.f_f(
								{
									f:'t_ot_fill_likes_random',
									btn_class:'btn_fill_likes_once',
									log_class:'log_1',
									form_class:'form_2',
									target:this,
								});
							">
						fill likes once
					</div>
					<div 	class="btn btn_fill_likes_repeating" 
							title="то же самое циклически"
							onClick=
							"
								mod_1.f_f(
								{
									f:'t_ot_fill_student_tab_random', 
									repeate:true,
									btn_class:'btn_fill_likes_repeating',
									log_class:'log_1',
									form_class:'form_2',
									target:this,
								});
							">
						fill likes repeating
					</div>
					<div 	class="btn btn_truncate_likes" 
							title="очистка likes"
							onClick=
							"
								mod_1.f_f(
								{
									f:'t_ot_f_truncate_tab',
									param_arr:
									{
										tab_name:'likes'
									},
									btn_class:'btn_truncate_likes',
									log_class:'log_1',
									form_class:'form_2',
									target:this,
								})
							">
						truncate likes
					</div>
				</div>

			</div>
			<div style="width:100%;overflow:hidden">
				<div class="btn right" onClick="mod_1.f_clear_log({log_class:'.log_1'})">Очистить лог</div>
			</div>
			<textarea class="log_1" style="min-width:100%;min-height:300px"></textarea>
			<div class="hidden">
				<div>
					a) Получить имена и средний балл всех студентов, которые были "лайкнуты" более чем одним студентом.
				</div>
				<div>
					б) Получить имена и средний балл студентов А, которые лайкнули студентов В, но при этом студенты В не поставили лайк ни на одной из страниц других студентов.
				</div>
				<div>
					в) Вернуть имена и средний балл всех студентов, которые не лайкали чужие страницы и не были лайкнуты другими пользователями.
				</div>
			</div>
		</div>
		<div class="content_center" style="padding:10px">

		</div>
		<div class="content_right">
			<h2>Запросы</h2>
			<div class="form_3_ hidden" style="overflow: hidden;">
				<div class="left" style="width: 100px;">Count</div>
				<input class="left id_count_likes" name="count" type="text" value="1000"/>
			</div>
			<div class="form_3" style="overflow: hidden;">
				<div class="left" style="width: 250px;">Диапазон результатов Limit</div>
				<input class="left id_limit_0_1" style="width:100px" type="text" name="limit.0" value="0"/> - 
				<input class="id_limit_1_1" style="width:100px" type="text" name="limit.1" value="100"/>
			</div>
			<div class="left" style="overflow:hidden; width:30%">
				<h3>Варианты запросов А</h3>
				
				<div 	class="btn" 
						title="при условии что студент может поставить одному и тому же студенту лайк единожды
								select 
									name, grade 
								 from 
									`students` s
								 where 
								  
									(
										select 
											count(liked_id) 
										from 
											`likes` l
										where 
											l.liked_id=s.id
									)>1 
								 limit $limit_0,$limit_1"
						onClick=
						"
							mod_1.f_f(
							{
								f:'f_student_A_sql_1',
								btn_class:'btn_fill_likes_once',
								log_class:'log_3',
								form_class:'form_3',
								content_class:'content',
								target:this,
							});
						">
					f_student_A_sql_1
				</div>
				<div 	class="btn" 
						onClick=
						"
							mod_1.f_f(
							{
								f:'f_student_A_sql_2',
								btn_class:'btn_fill_likes_repeating',
								log_class:'log_3',
								form_class:'form_3',
								content_class:'content',
								target:this,
							});
						">
					f_student_A_sql_2 
				</div>
				<div 	class="btn" 
						onClick=
						"
							mod_1.f_f(
							{
								f:'f_student_A_sql_3',
								btn_class:'btn_truncate_likes',
								log_class:'log_3',
								form_class:'form_3',
								content_class:'content',
								target:this,
							})
						">
					f_student_A_sql_3
				</div>
			</div>
			<div class="left" style="overflow:hidden; width:30%">
				<h3>Варианты запросов B</h3>
				
				<div 	class="btn" 
						onClick=
						"
							mod_1.f_f(
							{
								f:'f_student_B_sql_1',
								btn_class:'btn_fill_likes_once',
								log_class:'log_3',
								form_class:'form_3',
								content_class:'content',
								target:this,
							});
						">
					f_student_B_sql_1
				</div>
				<div 	class="btn" 
						onClick=
						"
							mod_1.f_f(
							{
								f:'f_student_B_sql_2',
								btn_class:'btn_fill_likes_repeating',
								log_class:'log_3',
								form_class:'form_3',
								content_class:'content',
								target:this,
							});
						">
					f_student_B_sql_2
				</div>
				<div 	class="btn" 
						onClick=
						"
							mod_1.f_f(
							{
								f:'f_student_B_sql_3',
								btn_class:'btn_truncate_likes',
								log_class:'log_3',
								form_class:'form_3',
								content_class:'content',
								target:this,
							})
						">
					f_student_B_sql_3
				</div>
				<div 	class="btn" 
						onClick=
						"
							mod_1.f_f(
							{
								f:'f_student_B_sql_4',
								btn_class:'btn_truncate_likes',
								log_class:'log_3',
								form_class:'form_3',
								content_class:'content',
								target:this,
							})
						">
					f_student_B_sql_4
				</div>
			</div>
			<div class="left" style="overflow:hidden; width:30%">
				<h3>Варианты запросов C</h3>
				<div 	class="btn" 
						onClick=
						"
							mod_1.f_f(
							{
								f:'f_student_C_sql_1',
								btn_class:'btn_fill_likes_once',
								log_class:'log_3',
								form_class:'form_3',
								content_class:'content',
								target:this,
							});
						">
					f_student_C_sql_1
				</div>
				<div 	class="btn" 
						onClick=
						"
							mod_1.f_f(
							{
								f:'f_student_C_sql_1',
								btn_class:'btn_fill_likes_repeating',
								log_class:'log_3',
								form_class:'form_3',
								content_class:'content',
								target:this,
							});
						">
					f_student_C_sql_2 
				</div>
			</div>
			<div style="width:100%;overflow:hidden">
				<div class="btn right" onClick="mod_1.f_clear_log({log_class:'.log_1'})">Очистить лог</div>
			</div>
			<textarea class="log_3" style="min-width:100%;min-height:300px"></textarea>
			<div class="content_box" style="width:100%">
				<div style="overflow: hidden;margin-top: 10px;background: #CFC;">
					<div class="left stud_out_id">id</div>
					<div class="left stud_out_name">name</div>
					<div class="right stud_out_grade">grade</div>
				</div>
				<div class="content"></div>
			</div>
		</div>
	</div>
	<div class="waiter_div hidden">
		<div style="overflow: hidden;
					margin: 0 auto;
					width: 140px;
					text-align: center;">
			<div style="float:left">Загрузка</div>
			<img src="res/tpl/waiter/26.gif" style="float: left;
												height: 30px;
												padding: 0px 0px 0px 5px;"/>
		</div>
	</div>
</body>

</html>
